#include <map>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
#include "sys/executor.h"
using namespace tdl;

struct AA
{
	void operator()(int i, string s)
	{ cout << "AA::operator(): " << i << ":" << s << endl; }
};
struct C {};
void aoo(int x) {}
void boo(char* p) {}
void coo(const char* p) {}
void eoo(C& o) {}
void hoo(const C& o) {}
void ioo(C* po) {}
void joo(const C* po) {}
void koo(int& x) {}
void loo(const int& x) {}

class A
{
public:
	void aoo(int x) {}
	void boo(char* p) {}
	void coo(const char* p) {}
	void eoo(C& o) {}
	void hoo(const C& o) {}
	void ioo(C* po) {}
	void joo(const C* po) {}
	void koo(int& x) {}
	void loo(const int& x) {}
};

//////////////////////
int main(int argc, char* argv[])
{
	A ao;
	C co;
	AA aa;
	int j = 1;
	char buf[10];
	char* p = buf;
	string s = "hello";

	executor* e = make_fun_exec(aa, 2, s);
	e->run();

	make_fun_exec(&aoo, 1);
	make_fun_exec(&aoo, j);
	make_fun_exec(&boo, p);
	make_fun_exec(&coo, p);
	make_fun_exec(&eoo, co);
	make_fun_exec(&hoo, co);
	make_fun_exec(&ioo, &co);
	make_fun_exec(&joo, &co);
	make_fun_exec(&koo, 1);
	make_fun_exec(&koo, j);
	make_fun_exec(&loo, 1);
	make_fun_exec(&loo, j);

	make_memfun_exec(ao, &A::aoo, 1);
	make_memfun_exec(ao, &A::boo, p);
	make_memfun_exec(ao, &A::coo, p);
	make_memfun_exec(ao, &A::eoo, co);
	make_memfun_exec(ao, &A::hoo, co);
	make_memfun_exec(ao, &A::ioo, &co);
	make_memfun_exec(ao, &A::joo, &co);
	make_memfun_exec(ao, &A::koo, 1);
	make_memfun_exec(ao, &A::koo, j);
	make_memfun_exec(ao, &A::loo, 1);
	make_memfun_exec(ao, &A::loo, j);


	return 0;
}

